package com.hzw.saas.api.storage;

import com.hzw.saas.api.storage.bo.InxChunkBO;

/**
 * 索引型分片存储服务
 *
 * @author zzl
 * @since 03/12/2021
 */
public interface InxChunkService {

    /**
     * 检查分片是否存在
     *
     * @param chunkCatalog 分片虚拟目录
     * @param chunkInfo    分片信息
     * @return true-存在/false-不存在
     */
    boolean exist(String chunkCatalog, InxChunkBO chunkInfo);

    /**
     * 保存分片
     *
     * @param chunkCatalog 分片虚拟目录
     * @param chunkInfo    分片信息
     * @param data         分片数据
     * @return chunkInfo
     */
    InxChunkBO saveChunk(String chunkCatalog, InxChunkBO chunkInfo, byte[] data);

    /**
     * 合并文件分片
     *
     * @param fileId       文件ID
     * @param chunkCatalog 分片虚拟目录
     * @param storageMode  存储模式
     */
    void mergeChunks(String fileId, String chunkCatalog, Integer storageMode);

    /**
     * 删除分片
     *
     * @param fileId       文件ID
     * @param chunkCatalog 分片虚拟目录
     * @param chunkNumber  分片编号
     */
    void deleteChunk(String fileId, String chunkCatalog, long chunkNumber);

    /**
     * 删除文件的所有分片
     *
     * @param chunkCatalog 分片虚拟目录
     * @param fileId       文件ID
     */
    void deleteChunks(String fileId, String chunkCatalog);

}
